<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 闭包的一个应用: 实现数据的私有化
        // 闭包产生的问题: 内存泄漏

        function count(){
            let i = 0
            return function () {
                i++
                console.log(`函数被调用了${i}次`)
            }
        }
        // const fn = count()
        const fn = function(){
            i++
            console.log(`函数被调用了${i}次`)
        }
        fn()

        // 1.本来i是函数内部的一个局部变量,按理说当我们调用完count()之后,应该释放掉这个变量
        // 2.但是这里,每次调用fn的时候,一直都能访问到这个i变量, i一直没有被回收

        // i本来应该被回收,但是没有释放,所以会造成内存泄漏

        // 闭包的应用
        // 1.节流:throttle
        // 2.防抖:debounce

        // 1. 箭头函数的this指向
        // 2. 闭包
        // 3. call / apply / bind 搞定
        // 4. 剩余参数rest 搞定 
        // 5. 定时器搞定
        // 6. 函数的返回值搞定 
    </script>
</body>
</html>